/*
 * Copyright 2020 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef _FSL_PINMUX_H_
#define _FSL_PINMUX_H_

#include "fsl_common.h"

/*!
 * @addtogroup pinmux
 * @{
 */

/*! @file */

/*******************************************************************************
 * Definitions
 ******************************************************************************/

/*! @name Driver version */
/*@{*/
/*! @brief PINMUX driver version 2.0.0. */
#define FSL_PINMUX_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
/*@}*/

/**
 * @brief PINMUX function and mode selection definitions
 * @note See the User Manual for specific modes and functions supported by the various pins.
 */
#define PINMUX_FUNC0     0x0U /*!< Selects pin function 0 */
#define PINMUX_FUNC1     0x1U /*!< Selects pin function 1 */
#define PINMUX_FUNC2     0x2U /*!< Selects pin function 2 */
#define PINMUX_FUNC3     0x3U /*!< Selects pin function 3 */
#define PINMUX_FUNC4     0x4U /*!< Selects pin function 4 */
#define PINMUX_FUNC5     0x5U /*!< Selects pin function 5 */
#define PINMUX_FUNC6     0x6U /*!< Selects pin function 6 */
#define PINMUX_FUNC7     0x7U /*!< Selects pin function 7 */
#define PINMUX_FUNC_MASK 0x7U /*!< Pinmux function mask in modefunc */

#define PINMUX_MODE_DEFAULT  (0x1U << 3)                                 /*!< Pulled up by default 50 kΩ */
#define PINMUX_MODE_PULLUP   ((0x1U << 3) | (0x1U << 14) | (0x1U << 15)) /*!< Selects pull-up */
#define PINMUX_MODE_PULLDOWN ((0x1U << 3) | (0x1U << 13) | (0x1U << 15)) /*!< Selects pull-down */
#define PINMUX_MODE_NOPULL   ((0x1U << 3) | (0x1U << 15))                /*!< Selects no pull */
#define PINMUX_MODE_TRISTATE (0x1U << 15)                                /*!< Selects tristate */

/* GPIO0 pinmux function define */
#define PINMUX_GPIO0_GPIO0      PINMUX_FUNC0
#define PINMUX_GPIO0_GPT0_CH0   PINMUX_FUNC1
#define PINMUX_GPIO0_UART0_CTSn PINMUX_FUNC2
#define PINMUX_GPIO0_SSP0_CLK   PINMUX_FUNC3

/* GPIO1 pinmux function define */
#define PINMUX_GPIO1_GPIO1      PINMUX_FUNC0
#define PINMUX_GPIO1_GPT0_CH1   PINMUX_FUNC1
#define PINMUX_GPIO1_UART0_RTSn PINMUX_FUNC2
#define PINMUX_GPIO1_SSP0_FRM   PINMUX_FUNC3

/* GPIO2 pinmux function define */
#define PINMUX_GPIO2_GPIO2     PINMUX_FUNC0
#define PINMUX_GPIO2_GPT0_CH2  PINMUX_FUNC1
#define PINMUX_GPIO2_UART0_TXD PINMUX_FUNC2
#define PINMUX_GPIO2_SSP0_TXD  PINMUX_FUNC3

/* GPIO3 pinmux function define */
#define PINMUX_GPIO3_GPIO3     PINMUX_FUNC0
#define PINMUX_GPIO3_GPT0_CH3  PINMUX_FUNC1
#define PINMUX_GPIO3_UART0_RXD PINMUX_FUNC2
#define PINMUX_GPIO3_SSP0_RXD  PINMUX_FUNC3

/* GPIO4 pinmux function define */
#define PINMUX_GPIO4_GPIO4     PINMUX_FUNC0
#define PINMUX_GPIO4_GPT0_CH4  PINMUX_FUNC1
#define PINMUX_GPIO4_I2C0_SDA  PINMUX_FUNC2
#define PINMUX_GPIO4_AUDIO_CLK PINMUX_FUNC3

/* GPIO5 pinmux function define */
#define PINMUX_GPIO5_GPIO5    PINMUX_FUNC0
#define PINMUX_GPIO5_GPT0_CH5 PINMUX_FUNC1
#define PINMUX_GPIO5_I2C0_SCL PINMUX_FUNC2

/* GPIO6 pinmux function define */
#define PINMUX_GPIO6_TDO          PINMUX_FUNC0
#define PINMUX_GPIO6_GPIO6        PINMUX_FUNC1
#define PINMUX_GPIO6_I2C1_SDA     PINMUX_FUNC2
#define PINMUX_GPIO6_DIG_POR      PINMUX_FUNC3
#define PINMUX_GPIO6_RC32M        PINMUX_FUNC4
#define PINMUX_GPIO6_AUPLL_DIGTP0 PINMUX_FUNC5

/* GPIO7 pinmux function define */
#define PINMUX_GPIO7_TCK          PINMUX_FUNC0
#define PINMUX_GPIO7_GPIO7        PINMUX_FUNC1
#define PINMUX_GPIO7_UART2_CTSn   PINMUX_FUNC2
#define PINMUX_GPIO7_SSP2_CLK     PINMUX_FUNC3
#define PINMUX_GPIO7_I2C0_SDA     PINMUX_FUNC4
#define PINMUX_GPIO7_AUPLL_DIGTP1 PINMUX_FUNC5

/* GPIO8 pinmux function define */
#define PINMUX_GPIO8_TMS          PINMUX_FUNC0
#define PINMUX_GPIO8_GPIO8        PINMUX_FUNC1
#define PINMUX_GPIO8_UART2_RTSn   PINMUX_FUNC2
#define PINMUX_GPIO8_SSP2_FRM     PINMUX_FUNC3
#define PINMUX_GPIO8_I2C0_SCL     PINMUX_FUNC4
#define PINMUX_GPIO8_AUPLL_DIGTP2 PINMUX_FUNC5

/* GPIO9 pinmux function define */
#define PINMUX_GPIO9_TDI          PINMUX_FUNC0
#define PINMUX_GPIO9_GPIO9        PINMUX_FUNC1
#define PINMUX_GPIO9_UART2_TXD    PINMUX_FUNC2
#define PINMUX_GPIO9_SSP2_TXD     PINMUX_FUNC3
#define PINMUX_GPIO9_I2C1_SDA     PINMUX_FUNC4
#define PINMUX_GPIO9_AUPLL_DIGTP3 PINMUX_FUNC5

/* GPIO10 pinmux function define */
#define PINMUX_GPIO10_TRST_N    PINMUX_FUNC0
#define PINMUX_GPIO10_GPIO10    PINMUX_FUNC1
#define PINMUX_GPIO10_UART2_RXD PINMUX_FUNC2
#define PINMUX_GPIO10_SSP2_RXD  PINMUX_FUNC3
#define PINMUX_GPIO10_I2C1_SCL  PINMUX_FUNC4
#define PINMUX_GPIO10_PHY_MON0  PINMUX_FUNC5

/* GPIO11 pinmux function define */
#define PINMUX_GPIO11_GPIO11     PINMUX_FUNC0
#define PINMUX_GPIO11_GPT2_CH0   PINMUX_FUNC1
#define PINMUX_GPIO11_UART1_CTSn PINMUX_FUNC2
#define PINMUX_GPIO11_SSP1_CLK   PINMUX_FUNC3

/* GPIO12 pinmux function define */
#define PINMUX_GPIO12_GPIO12     PINMUX_FUNC0
#define PINMUX_GPIO12_GPT2_CH1   PINMUX_FUNC1
#define PINMUX_GPIO12_UART1_RTSn PINMUX_FUNC2
#define PINMUX_GPIO12_SSP1_FRM   PINMUX_FUNC3

/* GPIO13 pinmux function define */
#define PINMUX_GPIO13_GPIO13    PINMUX_FUNC0
#define PINMUX_GPIO13_GPT2_CH2  PINMUX_FUNC1
#define PINMUX_GPIO13_UART1_TXD PINMUX_FUNC2
#define PINMUX_GPIO13_SSP1_TXD  PINMUX_FUNC3

/* GPIO14 pinmux function define */
#define PINMUX_GPIO14_GPIO14    PINMUX_FUNC0
#define PINMUX_GPIO14_GPT2_CH3  PINMUX_FUNC1
#define PINMUX_GPIO14_UART1_RXD PINMUX_FUNC2
#define PINMUX_GPIO14_SSP1_RXD  PINMUX_FUNC3

/* GPIO15 pinmux function define */
#define PINMUX_GPIO15_GPIO15   PINMUX_FUNC0
#define PINMUX_GPIO15_GPT2_CH4 PINMUX_FUNC1

/* GPIO16 pinmux function define */
#define PINMUX_GPIO16_GPIO16    PINMUX_FUNC0
#define PINMUX_GPIO16_STRAP1    PINMUX_FUNC1
#define PINMUX_GPIO16_AUDIO_CLK PINMUX_FUNC3
#define PINMUX_GPIO16_PHY_MON7  PINMUX_FUNC5

/* GPIO17 pinmux function define */
#define PINMUX_GPIO17_GPIO17   PINMUX_FUNC0
#define PINMUX_GPIO17_GPT3_CH0 PINMUX_FUNC1
#define PINMUX_GPIO17_I2C1_SCL PINMUX_FUNC2

/* GPIO18 pinmux function define */
#define PINMUX_GPIO18_GPIO18   PINMUX_FUNC0
#define PINMUX_GPIO18_GPT3_CH1 PINMUX_FUNC1
#define PINMUX_GPIO18_I2C1_SDA PINMUX_FUNC2
#define PINMUX_GPIO18_SSP1_CLK PINMUX_FUNC3

/* GPIO19 pinmux function define */
#define PINMUX_GPIO19_GPIO19   PINMUX_FUNC0
#define PINMUX_GPIO19_GPT3_CH2 PINMUX_FUNC1
#define PINMUX_GPIO19_I2C1_SCL PINMUX_FUNC2
#define PINMUX_GPIO19_SSP1_FRM PINMUX_FUNC3

/* GPIO20 pinmux function define */
#define PINMUX_GPIO20_GPIO20   PINMUX_FUNC0
#define PINMUX_GPIO20_GPT3_CH3 PINMUX_FUNC1
#define PINMUX_GPIO20_I2C0_SDA PINMUX_FUNC2
#define PINMUX_GPIO20_SSP1_TXD PINMUX_FUNC3

/* GPIO21 pinmux function define */
#define PINMUX_GPIO21_GPIO21   PINMUX_FUNC0
#define PINMUX_GPIO21_GPT3_CH4 PINMUX_FUNC1
#define PINMUX_GPIO21_I2C0_SCL PINMUX_FUNC2
#define PINMUX_GPIO21_SSP1_RXD PINMUX_FUNC3

/* GPIO22 pinmux function define */
#define PINMUX_GPIO22_WAKE_UP0 PINMUX_FUNC0
#define PINMUX_GPIO22_GPIO22   PINMUX_FUNC1

/* GPIO23 pinmux function define */
#define PINMUX_GPIO23_WAKE_UP1   PINMUX_FUNC0
#define PINMUX_GPIO23_GPIO23     PINMUX_FUNC1
#define PINMUX_GPIO23_UART0_CTSn PINMUX_FUNC2
#define PINMUX_GPIO23_SFLL_200M  PINMUX_FUNC4
#define PINMUX_GPIO23_COMP_IN_P  PINMUX_FUNC5

/* GPIO24 pinmux function define */
#define PINMUX_GPIO24_OSC32K    PINMUX_FUNC0
#define PINMUX_GPIO24_GPIO24    PINMUX_FUNC1
#define PINMUX_GPIO24_UART0_RXD PINMUX_FUNC2
#define PINMUX_GPIO24_GPT1_CH5  PINMUX_FUNC3
#define PINMUX_GPIO24_COMP_IN_N PINMUX_FUNC5

/* GPIO25 pinmux function define */
#define PINMUX_GPIO25_XTAL32K_IN PINMUX_FUNC0
#define PINMUX_GPIO25_GPIO25     PINMUX_FUNC1
#define PINMUX_GPIO25_I2C1_SDA   PINMUX_FUNC2

/* GPIO26 pinmux function define */
#define PINMUX_GPIO26_XTAL32K_OUT PINMUX_FUNC0
#define PINMUX_GPIO26_GPIO26      PINMUX_FUNC1
#define PINMUX_GPIO26_I2C1_SCL    PINMUX_FUNC2

/* GPIO27 pinmux function define */
#define PINMUX_GPIO27_GPIO27    PINMUX_FUNC0
#define PINMUX_GPIO27_STRAP0    PINMUX_FUNC1
#define PINMUX_GPIO27_UART0_TXD PINMUX_FUNC2
#define PINMUX_GPIO27_DRVVBUS   PINMUX_FUNC3
#define PINMUX_GPIO27_RC32K     PINMUX_FUNC4

/* GPIO28 pinmux function define */
#define PINMUX_GPIO28_QSPI_SSn PINMUX_FUNC0
#define PINMUX_GPIO28_GPIO28   PINMUX_FUNC1
#define PINMUX_GPIO28_I2C0_SDA PINMUX_FUNC2
#define PINMUX_GPIO28_PHY_MON1 PINMUX_FUNC4
#define PINMUX_GPIO28_GPT1_CH0 PINMUX_FUNC5

/* GPIO29 pinmux function define */
#define PINMUX_GPIO29_QSPI_CLK PINMUX_FUNC0
#define PINMUX_GPIO29_GPIO29   PINMUX_FUNC1
#define PINMUX_GPIO29_I2C0_SCL PINMUX_FUNC2
#define PINMUX_GPIO29_PHY_MON2 PINMUX_FUNC4
#define PINMUX_GPIO29_GPT1_CH1 PINMUX_FUNC5

/* GPIO30 pinmux function define */
#define PINMUX_GPIO30_QSPI_D0    PINMUX_FUNC0
#define PINMUX_GPIO30_GPIO30     PINMUX_FUNC1
#define PINMUX_GPIO30_UART0_CTSn PINMUX_FUNC2
#define PINMUX_GPIO30_SSP0_CLK   PINMUX_FUNC3
#define PINMUX_GPIO30_PHY_MON3   PINMUX_FUNC4
#define PINMUX_GPIO30_GPT1_CH2   PINMUX_FUNC5

/* GPIO31 pinmux function define */
#define PINMUX_GPIO31_QSPI_D1    PINMUX_FUNC0
#define PINMUX_GPIO31_GPIO31     PINMUX_FUNC1
#define PINMUX_GPIO31_UART0_RTSn PINMUX_FUNC2
#define PINMUX_GPIO31_SSP0_FRM   PINMUX_FUNC3
#define PINMUX_GPIO31_PHY_MON4   PINMUX_FUNC4
#define PINMUX_GPIO31_GPT1_CH3   PINMUX_FUNC5

/* GPIO32 pinmux function define */
#define PINMUX_GPIO32_QSPI_D2   PINMUX_FUNC0
#define PINMUX_GPIO32_GPIO32    PINMUX_FUNC1
#define PINMUX_GPIO32_UART0_TXD PINMUX_FUNC2
#define PINMUX_GPIO32_SSP0_TXD  PINMUX_FUNC3
#define PINMUX_GPIO32_PHY_MON5  PINMUX_FUNC4
#define PINMUX_GPIO32_GPT1_CH4  PINMUX_FUNC5

/* GPIO33 pinmux function define */
#define PINMUX_GPIO33_QSPI_D3   PINMUX_FUNC0
#define PINMUX_GPIO33_GPIO33    PINMUX_FUNC1
#define PINMUX_GPIO33_UART0_RXD PINMUX_FUNC2
#define PINMUX_GPIO33_SSP0_RXD  PINMUX_FUNC3
#define PINMUX_GPIO33_PHY_MON6  PINMUX_FUNC4
#define PINMUX_GPIO33_GPT1_CH5  PINMUX_FUNC5

/* GPIO34 pinmux function define */
#define PINMUX_GPIO34_GPIO34   PINMUX_FUNC0
#define PINMUX_GPIO34_GPT3_CH5 PINMUX_FUNC1

/* GPIO35 pinmux function define */
#define PINMUX_GPIO35_GPIO35     PINMUX_FUNC0
#define PINMUX_GPIO35_GPT0_CLKIN PINMUX_FUNC1
#define PINMUX_GPIO35_UART1_CTSn PINMUX_FUNC2
#define PINMUX_GPIO35_SSP1_CLK   PINMUX_FUNC3

/* GPIO36 pinmux function define */
#define PINMUX_GPIO36_GPIO36     PINMUX_FUNC0
#define PINMUX_GPIO36_GPT1_CLKIN PINMUX_FUNC1
#define PINMUX_GPIO36_UART1_RTSn PINMUX_FUNC2
#define PINMUX_GPIO36_SSP1_FRM   PINMUX_FUNC3

/* GPIO37 pinmux function define */
#define PINMUX_GPIO37_GPIO37     PINMUX_FUNC0
#define PINMUX_GPIO37_GPT2_CH5   PINMUX_FUNC1
#define PINMUX_GPIO37_UART0_RTSn PINMUX_FUNC2

/* GPIO38 pinmux function define */
#define PINMUX_GPIO38_GPIO38     PINMUX_FUNC0
#define PINMUX_GPIO38_GPT2_CLKIN PINMUX_FUNC1
#define PINMUX_GPIO38_UART1_TXD  PINMUX_FUNC2
#define PINMUX_GPIO38_SSP1_TXD   PINMUX_FUNC3

/* GPIO39 pinmux function define */
#define PINMUX_GPIO39_GPIO39      PINMUX_FUNC0
#define PINMUX_GPIO39_GPT3_CLKIN  PINMUX_FUNC1
#define PINMUX_GPIO39_UART1_RXD   PINMUX_FUNC2
#define PINMUX_GPIO39_SSP1_RXD    PINMUX_FUNC3
#define PINMUX_GPIO39_RC32M_CLKIN PINMUX_FUNC5

/* GPIO40 pinmux function define */
#define PINMUX_GPIO40_GPIO40          PINMUX_FUNC0
#define PINMUX_GPIO40_GAU_TRIGGER0    PINMUX_FUNC1
#define PINMUX_GPIO40_ACOMP0_GPIO_OUT PINMUX_FUNC2
#define PINMUX_GPIO40_ACOMP1_GPIO_OUT PINMUX_FUNC3

/* GPIO41 pinmux function define */
#define PINMUX_GPIO41_GPIO41            PINMUX_FUNC0
#define PINMUX_GPIO41_GAU_TRIGGER1      PINMUX_FUNC1
#define PINMUX_GPIO41_ACOMP0_EDGE_PULSE PINMUX_FUNC2
#define PINMUX_GPIO41_ACOMP1_EDGE_PULSE PINMUX_FUNC3
#define PINMUX_GPIO41_TRACE_CLKOUT      PINMUX_FUNC5

/* GPIO42 pinmux function define */
#define PINMUX_GPIO42_GPIO42      PINMUX_FUNC0
#define PINMUX_GPIO42_ADC0_IN0    PINMUX_FUNC1
#define PINMUX_GPIO42_ACOMP_IN0   PINMUX_FUNC1
#define PINMUX_GPIO42_TS_INP      PINMUX_FUNC1
#define PINMUX_GPIO42_VOICE_P     PINMUX_FUNC1
#define PINMUX_GPIO42_UART1_CTSn  PINMUX_FUNC2
#define PINMUX_GPIO42_SSP1_CLK    PINMUX_FUNC3
#define PINMUX_GPIO42_TRACE_DATA0 PINMUX_FUNC4
#define PINMUX_GPIO42_PHY_MON8    PINMUX_FUNC5

/* GPIO43 pinmux function define */
#define PINMUX_GPIO43_GPIO43      PINMUX_FUNC0
#define PINMUX_GPIO43_ADC0_IN1    PINMUX_FUNC1
#define PINMUX_GPIO43_ACOMP_IN1   PINMUX_FUNC1
#define PINMUX_GPIO43_TS_INN      PINMUX_FUNC1
#define PINMUX_GPIO43_DACB        PINMUX_FUNC1
#define PINMUX_GPIO43_VOICE_N     PINMUX_FUNC1
#define PINMUX_GPIO43_UART1_RTSn  PINMUX_FUNC2
#define PINMUX_GPIO43_SSP1_FRM    PINMUX_FUNC3
#define PINMUX_GPIO43_TRACE_DATA1 PINMUX_FUNC4
#define PINMUX_GPIO43_PHY_MON9    PINMUX_FUNC5

/* GPIO44 pinmux function define */
#define PINMUX_GPIO44_GPIO44      PINMUX_FUNC0
#define PINMUX_GPIO44_ADC0_IN2    PINMUX_FUNC1
#define PINMUX_GPIO44_ACOMP_IN2   PINMUX_FUNC1
#define PINMUX_GPIO44_DACA        PINMUX_FUNC1
#define PINMUX_GPIO44_DEBUG_P     PINMUX_FUNC1
#define PINMUX_GPIO44_UART1_TXD   PINMUX_FUNC2
#define PINMUX_GPIO44_SSP1_TXD    PINMUX_FUNC3
#define PINMUX_GPIO43_TRACE_DATA2 PINMUX_FUNC4
#define PINMUX_GPIO44_PHY_MON10   PINMUX_FUNC5

/* GPIO45 pinmux function define */
#define PINMUX_GPIO45_GPIO45      PINMUX_FUNC0
#define PINMUX_GPIO45_ADC0_IN3    PINMUX_FUNC1
#define PINMUX_GPIO45_ACOMP_IN3   PINMUX_FUNC1
#define PINMUX_GPIO45_EXT_VREF    PINMUX_FUNC1
#define PINMUX_GPIO45_UART1_RXD   PINMUX_FUNC2
#define PINMUX_GPIO45_SSP1_RXD    PINMUX_FUNC3
#define PINMUX_GPIO43_TRACE_DATA3 PINMUX_FUNC4
#define PINMUX_GPIO45_PHY_MON11   PINMUX_FUNC5

/* GPIO46 pinmux function define */
#define PINMUX_GPIO46_GPIO46     PINMUX_FUNC0
#define PINMUX_GPIO46_ADC0_IN4   PINMUX_FUNC1
#define PINMUX_GPIO46_ACOMP_IN4  PINMUX_FUNC1
#define PINMUX_GPIO46_UART2_CTSn PINMUX_FUNC2
#define PINMUX_GPIO46_SSP2_CLK   PINMUX_FUNC3
#define PINMUX_GPIO46_PHY_MON12  PINMUX_FUNC5

/* GPIO47 pinmux function define */
#define PINMUX_GPIO47_GPIO47     PINMUX_FUNC0
#define PINMUX_GPIO47_ADC0_IN5   PINMUX_FUNC1
#define PINMUX_GPIO47_ACOMP_IN5  PINMUX_FUNC1
#define PINMUX_GPIO47_UART2_RTSn PINMUX_FUNC2
#define PINMUX_GPIO47_SSP2_FRM   PINMUX_FUNC3
#define PINMUX_GPIO47_PHY_MON13  PINMUX_FUNC5

/* GPIO48 pinmux function define */
#define PINMUX_GPIO48_GPIO48    PINMUX_FUNC0
#define PINMUX_GPIO48_ADC0_IN6  PINMUX_FUNC1
#define PINMUX_GPIO48_ACOMP_IN6 PINMUX_FUNC1
#define PINMUX_GPIO48_UART2_TXD PINMUX_FUNC2
#define PINMUX_GPIO48_SSP2_TXD  PINMUX_FUNC3
#define PINMUX_GPIO48_PHY_MON14 PINMUX_FUNC5

/* GPIO49 pinmux function define */
#define PINMUX_GPIO49_GPIO49    PINMUX_FUNC0
#define PINMUX_GPIO49_ADC0_IN7  PINMUX_FUNC1
#define PINMUX_GPIO49_ACOMP_IN7 PINMUX_FUNC1
#define PINMUX_GPIO49_UART2_RXD PINMUX_FUNC2
#define PINMUX_GPIO49_SSP2_RXD  PINMUX_FUNC3
#define PINMUX_GPIO49_PHY_MON15 PINMUX_FUNC5

#if defined(__cplusplus)
extern "C" {
#endif

/**
 * @brief   Sets I/O Pad Control pin mux
 * @param   pin         : GPIO pin to mux
 * @param   modefunc    : OR'ed values of mode and function, type PINMUX_*
 */
void PINMUX_PinMuxSet(uint32_t pin, uint32_t modefunc);

#if defined(__cplusplus)
}
#endif /*_cplusplus */

/*! @}*/

#endif /* _FSL_PINMUX_H_ */
